嗨大家好,我是Sean!
今天來讓我們接續昨天的三大將之一: model! 說到model就不得不提,Migration!
我認為在初期學習django框架能夠釐清MIgration的功能以及作用,對以後能夠少碰到一點error,是非常有幫助的!
所以特別獨立出一篇,獻給我們的Migration!
話說回來,Migration這麼重要,那甚麼是Migration呢?
直譯來說,就是資料遷移。在django的model中,利用ORM的技術,將table換作class,而欄位化作其中的屬性,使的我們可以ORM的方式,透過物件來操作、選取、變更資料。
而Migration 就是以上述的概念為基礎,來將class、attribute(屬性)遷移,在資料庫當中建立相對應class的表以及attribute的欄位。
回到我們的專案,昨天我們所建立model.py,尚未執行migration的指令。但在此之前,我們必須先將我們app註冊在settings.py之中。
打開我們的專案,可以看到settings.py在專案的資料夾中。
找到INSTALLED_APPS = []的部分,將我們的app: ironman加入在最下面。
加入完以後別忘記,按下Ctrl+S儲存settings.py,並且開啟虛擬環境。
接下來一樣cd進入專案資料夾後,輸入指令來生成migration的遷移腳本。
python manage.py makemigrations
輸入完成後,可以看到cmd當中出現了提示,生成了0001_initial.py的檔案,而他主要做的事就寫在下方,create model People,也就是建立我們昨天在models.py裡寫的class People,以及它所屬的欄位。
更進一步,我們點開ironman資料夾底下的migrations資料夾,可以看到真的生成了0001_initial.py的檔案。
此檔案的目的是在於依照models.py以及django_migrations、content_type等table的變化,來生成指令,並且在下一步,migrate,也就是實際上進行遷移時,直接轉換sql語法來幫助我們快速建立、更改或刪除資料庫。
值得注意的是,這裡的腳本是我們可以更改的。我們在之後的文章會再討論到這個部分。
在使用makemigrations的時候,有時生成的檔案與我們想做的修改並不相同,可以修改migrations檔案的方式來更改其執行的動作。
回到專案可以看到,除了我們撰寫的欄位外,系統自動生成了id的欄位,並把它設定為primary key。
所以在進行migrate之前,最好都可以確認一下,到底migrations的檔案裡都寫了甚麼,是否符合我們想要達到的效果。
接下來,我們來正式的進行遷移! 建立資料庫的表以及欄位!
python manage.py migrate
看到了這麼多綠色的ok,就代表第一次的migrate成功了。
往後每次的migrations,只會看到一個綠色ok。第一次migration,會出現這麼多ok,是由於django自動生成了的其他預設的table,不用擔心。
django預設使用的資料庫為sqlite。如果你有安裝sqlite的extension的話,可以看到已經有以下這些欄位建立成功了!恭喜恭賀!
那今天的文章就先到此結束!
我是Sean! 你各位海上的人,我們明天見!